package delphorm.web.validateur;

import java.util.regex.Pattern;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import delphorm.web.forms.AjouterUtilisateurFormulaire;

/**
 * Permet de valider les données pour les controller AjouterUtilisateur et EditerUtilisateur.
 * @author jerome
 * @see delphorm.web.controller.AjouterUtilisateurFull delphorm.web.controller.EditerUtilisateur
 */
public class EditerUtilisateurValidateur implements Validator {
	


	public boolean supports(Class classe) {
		
		return classe.isAssignableFrom(AjouterUtilisateurFormulaire.class);
	}

	/**
	 * <ul>
	 * 	<li>nom: obligatoire et au moins 2 caractères</li>
	 * 	<li>prenom: obligatoire et au moins 2 caractères</li>
	 * 	<li>login: obligatoire et entre 6 et 20 caractères</li>
	 * 	<li>password: obligatoire, entre 6 et 20 caractères et doit être égal à passwordConfirm</li>
	 * 	<li>profession: obligatoire et entre 6 et 50 caractères</li>
	 * 	<li>adressePostale: au plus 300 caractères</li>
	 * 	<li>etat: </li>
	 * 	<li>municipalite: entre 2 et 50 cartactères</li>
	 * 	<li>ville: entre 2 et 50 cartactères</li>
	 * 	<li>codepostal: entre 3 et 6 caractères</li>
	 * 	<li>adresseElectronique: entre 2 et 50 cartactères et au bon format</li>
	 * 	<li>numeroTelephone: entre 6 et 16 chiffres</li>
	 * 	<li>numeroFax: entre 6 et 16 chiffres</li>
	 * 	<li>Au moins une coordonnée (postale, téléphone, fax, mèl) doit être renseignée</li>
	 * </ul>
	 * 	
	 * @param obj est de type AjouterUtilisateurFormulaire
	 */
	public void validate(Object obj, Errors errors) {
		AjouterUtilisateurFormulaire formulaire = (AjouterUtilisateurFormulaire) obj;
		
		//verification du login
		String login = formulaire.getLogin();
		if(login == null || login.trim().length() == 0) //obligatoire
		{
			errors.rejectValue("login","AjouterUtilisateurFormulaire.login.necessaire");
		}
//		else if(login.trim().length() < ) //entre 6 et 20 caracteres
//		{
//			errors.rejectValue("login","AjouterUtilisateurFormulaire.login.mauvais");
//		}
		
		
		//verification du mot de passe
		String password = formulaire.getPassword();
		if(password == null || password.trim().length() == 0) //obligatoire
		{
			errors.rejectValue("password","AjouterUtilisateurFormulaire.password.necessaire");
		}
		else if(password.trim().length() < 6 ) //au moins 6 caractères
		{
			errors.rejectValue("password","AjouterUtilisateurFormulaire.password.mauvais");
		}
		
		//les mots de passe doivent être identiques
		String passwordConfirm = formulaire.getPasswordConfirm();
		if(!password.equals(passwordConfirm))
		{
			errors.rejectValue("passwordConfirm","AjouterUtilisateurFormulaire.passwordConfirm.mauvais");
		}
		
		//la profession
		String profession = formulaire.getProfession();
		if(profession == null || profession.trim().length() == 0) //obligatoire
		{
			errors.rejectValue("profession","AjouterUtilisateurFormulaire.profession.necessaire");
		}
//		else if(profession.trim().length() < 2 || profession.trim().length() > 50) //entre 2 et 20 caractères
//		{
//			errors.rejectValue("profession","AjouterUtilisateurFormulaire.profession.mauvais");
//		}
		
		//booleen permettant de savoir si un moyen de contact est valide
		boolean adressePostaleOK = true;
		boolean adresseElectroniqueOK = true;
		boolean numeroTelephoneOK = true;
		boolean numeroFaxOK = true;
		
		//adresse postale
//		String adressePostale = formulaire.getAdressePostale();
//		if(adressePostale.trim().length() > 300) //au plus 300 carac.
//		{
//			errors.rejectValue("adressePostale","AjouterUtilisateurFormulaire.adressePostale.mauvais");
//			adressePostaleOK = false;
//		}
		
		//etat
		String etat = formulaire.getEtat();
		if(etat != null && etat.trim().length() != 0)
		{
			adressePostaleOK = true;
		}
		
		
		
		
		//municipalite
		String municipalite = formulaire.getMunicipalite();
		if(municipalite == null || municipalite.trim().length() == 0)
		{
			adressePostaleOK = false;
		}
//		else if(municipalite.trim().length() > 50 || municipalite.trim().length() < 2 ) //entre 2 et 50
//		{
//			errors.rejectValue("municipalite","AjouterUtilisateurFormulaire.municipalite.mauvais");
//			adressePostaleOK = false;
//		}	
		
		//ville
		String ville = formulaire.getVille();
		if(ville == null || ville.trim().length() == 0)
		{
			adressePostaleOK = false;
		}
//		else if(ville.trim().length() > 50 || ville.trim().length() < 2 ) //entre 2 et 50
//		{
//			errors.rejectValue("ville","AjouterUtilisateurFormulaire.ville.mauvais");
//			adressePostaleOK = false;
//		}
		
		//code postal
		String codepostal = formulaire.getCodepostal();
		if(codepostal == null || codepostal.trim().length() == 0)
		{
			adressePostaleOK = false;
		}
//		else if(codepostal.trim().length() > 6 || codepostal.trim().length() < 3) //entre 3 et 6
//		{
//			errors.rejectValue("codepostal","AjouterUtilisateurFormulaire.codepostal.mauvais");
//			adressePostaleOK = false;
//		}
		
		//pays
		String pays = formulaire.getPays();
		if(pays == null || pays.trim().length() == 0)
		{
			adressePostaleOK = false;
		}
//		else if(pays.trim().length() > 50) //entre 3 et 6
//		{
//			errors.rejectValue("pays","AjouterUtilisateurFormulaire.ville.mauvais");
//			adressePostaleOK = false;
//		}
		
		//adresse electronique
		String adresseElectronique = formulaire.getAdresseElectronique();
		if(adresseElectronique == null || adresseElectronique.trim().length() == 0) 
		{
			adresseElectroniqueOK = false;
		}
		else if(!Pattern.matches("\\S+@{1}?\\S+\\.\\w{2,}?",adresseElectronique)) //lettres@lettres.lettres (expression regulière
		{
			errors.rejectValue("adresseElectronique","AjouterUtilisateurFormulaire.adresseElectronique.mauvaisformat");
			adresseElectroniqueOK = false;
		}
//		else if(adresseElectronique.trim().length() > 50 ) //entre 2 et 50
//		{
//			errors.rejectValue("adresseElectronique","AjouterUtilisateurFormulaire.adresseElectronique.mauvaisetaille");
//			adresseElectroniqueOK = false;
//		}
		
		//numéro de téléphone
		String numeroTelephone = formulaire.getNumeroTelephone();
		if(numeroTelephone == null || numeroTelephone.trim().length() == 0) 
		{
			numeroTelephoneOK = false;
		}
		else if(!Pattern.matches("\\d{6,30}?",numeroTelephone))
		{
			errors.rejectValue("numeroTelephone","AjouterUtilisateurFormulaire.numeroTelephone.mauvais");
			numeroTelephoneOK = false;
		}
		
		//numéro de téléphone
		String numeroFax = formulaire.getNumeroFax();
		if(numeroFax == null || numeroFax.trim().length() == 0) 
		{
			numeroFaxOK = false;
		}
		else if(!Pattern.matches("\\d{6,30}?",numeroFax))
		{
			errors.rejectValue("numeroFax","AjouterUtilisateurFormulaire.numeroFax.mauvais");
			numeroFaxOK = false;
		}
		
		//vérifie si au moins une coordonnée est valide
		if(!(adressePostaleOK || adresseElectroniqueOK || numeroTelephoneOK || numeroFaxOK))
		{
			errors.reject("AjouterUtilisateurFormulaire.coordonnees.mauvais");
		}
	}

}
